package com.sky.controller.admin;


import cn.mybatis.mp.core.mybatis.mapper.context.Pager;
import com.sky.entity.Categories;
import com.sky.result.Result;
import com.sky.service.CategoriesService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author majun
 * @package com.sky.controller.admin
 * @date 2025/6/28 13:46
 */
@Slf4j
@RestController
@RequestMapping("/admin/categories")
public class CategoriesController {

    @Autowired
    private CategoriesService categoriesService;

    /**
     * 通过名称查询分类列表
     * @param name 分类名称
     * @return 分类名称列表
     */
    @GetMapping("/getByName")
    private Result<List<String>> getByNameList(@RequestParam String name) {

        log.info("通过名称查询分类列表,{}", name);

        return Result.success(categoriesService.getByNameList(name));

    }

    /**
     * 根据ID获取分类详情
     * @param id 分类ID
     * @return 分类详情
     */
    @GetMapping("/{id}")
    private Result<Categories> getCategoryById(@PathVariable Long id) {
        log.info("根据ID获取分类详情, id: {}", id);
        Categories category = categoriesService.getCategoriesById(id);
        if (category == null) {
            return Result.error("分类不存在");
        }
        return Result.success(category);
    }

    /**
     * 新增分类
     * @param categories 分类信息
     * @return 操作结果
     */
    @PostMapping
    private Result<String> addCategory(@RequestBody Categories categories) {
        log.info("新增分类: {}", categories);
        try {
            categoriesService.addCategory(categories);
            return Result.success("新增分类成功");
        } catch (Exception e) {
            log.error("新增分类失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 更新分类
     * @param categories 分类信息
     * @return 操作结果
     */
    @PutMapping
    private Result<String> updateCategory(@RequestBody Categories categories) {
        log.info("更新分类: {}", categories);
        try {
            categoriesService.updateCategory(categories);
            return Result.success("更新分类成功");
        } catch (Exception e) {
            log.error("更新分类失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 删除分类
     * @param id 分类ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    private Result<String> deleteCategory(@PathVariable Long id) {
        log.info("删除分类, id: {}", id);
        try {
            categoriesService.deleteCategory(id);
            return Result.success("删除分类成功");
        } catch (Exception e) {
            log.error("删除分类失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 分页查询分类
     * @param name 分类名称（可选）
     * @param page 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    @GetMapping("/page")
    private Result<Pager<Categories>> getCategoriesPage(
            @RequestParam(required = false) String name,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        log.info("分页查询分类, name: {}, page: {}, pageSize: {}", name, page, pageSize);
        Pager<Categories> pager = categoriesService.getCategoriesPage(name, page, pageSize);
        return Result.success(pager);
    }

}
